#pragma once

#include "Hazel/Window.h"
struct GLFWwindow;

namespace Hazel {

    class HAZEL_API WindowsWindow : public Window
    {
    public:
        WindowsWindow(const WindowProps& props);
        virtual ~WindowsWindow();

        void OnUpdte() override;

        virtual unsigned int GetWidth() const override { return m_Data.Width; };
        virtual unsigned int GetHeight() const  override { return m_Data.Height; };

        virtual void SetEventCallback(const EvenCallbackFn& callback) override { m_Data.EventCallback = callback; };
        virtual void SetVSync(bool enabled) override;
        virtual bool IsVSync() override;
    private:
        virtual void Init(const WindowProps& props);
        virtual void Shutdown();

    private:
        GLFWwindow* m_Window;

        struct WindowData
        {
            std::string Title;
            unsigned int Width;
            unsigned int Height;
            bool vSync;

            EvenCallbackFn EventCallback;
        } m_Data;
    };

}
